"""
## Python中`*`和`**`的用法

### 1. `*`的用法

#### 解包操作符（Unpacking Operator）
- 用于**解包可迭代对象**（如列表、元组）
- 将序列中的元素逐一展开

```python
# 解包列表
numbers = [1, 2, 3]
print(*numbers)  # 输出: 1 2 3

# 解包元组
coords = (10, 20)
def move(x, y):
    return x + y
result = move(*coords)  # 等价于 move(10, 20)
```


#### 函数参数收集
- 在函数定义中收集位置参数

```python
def sum_all(*args):
    return sum(args)

sum_all(1, 2, 3, 4)  # args = (1, 2, 3, 4)
```


### 2. `**`的用法

#### 字典解包操作符
- 用于**解包字典**对象
- 将字典的键值对作为关键字参数传递

```python
# 解包字典
params = {'name': 'Alice', 'age': 30}
def greet(name, age):
    return f"Hello {name}, you are {age} years old"
greet(**params)  # 等价于 greet(name='Alice', age=30)
```


#### 函数关键字参数收集
- 在函数定义中收集关键字参数

```python
def create_profile(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

create_profile(name="Bob", city="New York")
# kwargs = {'name': 'Bob', 'city': 'New York'}
```


### 3. 实际应用场景

#### 批量数据处理
```python
# 在数据加载中常用
batch = (src_tensor, tgt_tensor)
model(*batch)  # 等价于 model(src_tensor, tgt_tensor)
```


#### 参数传递灵活性
```python
# 同时使用*和**
def flexible_function(*args, **kwargs):
    print("位置参数:", args)
    print("关键字参数:", kwargs)

flexible_function(1, 2, name="John", age=25)
# args = (1, 2)
# kwargs = {'name': 'John', 'age': 25}
```
"""
